var pacificAtlantic = function(heights) {
    /*逆流  */ 
    let [m,n] = [heights.length, heights[0].length] ;
    let pacSet =new Set() ,altlanSet = new Set() ;
    /* 左边界 和右边界  这里边界不能直接放进集合 */
    for(let r =0;r < m; r++){
        dfs(r,0,pacSet,'r') ;pacSet.add(r + ','+0) ;
        dfs(r,n-1,altlanSet,'l') ; altlanSet.add(r+','+(n-1)) ;
    }
    /* 上边界和下边界 */
    for(let c =0;c < n; c++){
        dfs(0,c,pacSet,'d') ;pacSet.add(0 + ','+c);
        dfs(m-1,c,altlanSet,'u') ;altlanSet.add(m-1 +','+ c)
  
    }
    console.log(pacSet, altlanSet)
      let ans =[]
    /* 找到两个都能的 */
      for( let str of pacSet){
          if(altlanSet.has(str)){ ans.push(str.split(','))}
      }
      return  ans
  
  /* 从某一边界出发遍历时，有一个方向是不需要的,等于的情况可能出现反复纵横跳，死循环 */
    function dfs(r,c, set, direction){
                 if(r ===1 && c ===2) {
                      
                    console.log(direction)}
  
        let h = heights[r][c]
        /* 下 */
        if(r+1< m && direction!=='u' && heights[r+1][c] >=h ){ 
          //   console.log(r ,c)
            let str = (r+1)+','+c;
            if(!set.has(str)){
            set.add(str) ;
            dfs(r+1,c,set, direction )
            dfs(r+1,c,set, direction )
            dfs(r+1,c,set, direction )
        } 
          }
          /* 上 */
        if(r-1> -1&& direction!=='d' && heights[r-1][c] >=h ){ let str = (r-1)+','+c;if(!set.has(str)){
            set.add(str) ;
        dfs(r-1,c,set, direction ) 
        } 
        }
        /* 左 */
        if(c-1> -1&& direction!=='r' && heights[r][c-1] >=h ){
            
             let str = r+','+(c-1);
             if(!set.has(str)){
            
            set.add(str) ;
        dfs(r,c-1,set, direction ) 
        } 
        }
        if(c+1< n && direction!=='l' && heights[r][c+1] >=h ){ let str = r+','+(c+1);if(!set.has(str)){
            set.add(str) ;
        dfs(r,c+1,set, direction ) 
        } 
        }
    }
  };
  let grid = [[1,2,3],[8,9,4],[7,6,5]] ;

  pacificAtlantic(grid)
  /*   对于上左两边  下右方向， 有可能在 其中一个方向已经加进去了，导致，换了个方向的时候走不了 应该改为 和方向有关
    应该改为真正的深度遍历 去掉方向的约束，我已经有去重的约束了 。

    真正的深度遍历，会用一个同样的数据结构来存储是否已经遍历过这里，我受限于树的思维了，树根本不会有重复的可能
  */